package cifrasong.usuario.negocio;

import android.content.Context;
import android.widget.EditText;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import cifrasong.usuario.dominio.Session;
import cifrasong.usuario.persistencia.UsuarioDAO;
import cifrasong.usuario.dominio.Usuario;


/**
 * Created by Uehara on 08/11/2014.
 */
public class UsuarioService {

    private UsuarioDAO UsuarioDAO = null;

    public UsuarioService(Context context){
        this.UsuarioDAO = UsuarioDAO.getInstance();
        this.UsuarioDAO.setContextUp(context);
    }

	
    public void login(String login , String senha) throws Exception{
        StringBuilder message = new StringBuilder();
        if (login.length() <= 0){
            message.append("Falta inserir o login de usuario.");
        }else if (senha.length() <= 0){
            message.append("Falta inserir a senha.");
        }else if(!(UsuarioDAO.login(login,senha))){
            message.append("Login de usuário ou senha incorretos.");
        }
        if (message.length() > 0){
            throw new Exception(message.toString());
        }else{
            Usuario novo = new Usuario();
            novo.setLogin(login);
            Session.setUsuarioLogado(novo);
            montarSession();
        }
    }


	public void adicionar(Usuario usuario,String confirmarSenha) throws Exception {
        StringBuilder message = new StringBuilder();

        if((!validarLogin(usuario.getLogin())) || (UsuarioDAO.existeUsuario(usuario))){message.append("O login já está cadastrado ou tem menos de 4 caracteres.");}

        else if(!validarEmail(usuario.getEmail())){message.append("O email digitado não é valido.");}

        else if(usuario.getSenha().length()<=0){message.append("Digite uma senha.");}

        else if(confirmarSenha.length()<=0){message.append("Digite uma confirmação de senha.");}

        else if(!usuario.getSenha().equals(confirmarSenha)){message.append("As senhas digitadas não conferem.");}

        if(message.length() > 0){throw new Exception(message.toString());}

        else{UsuarioDAO.adicionarUsuario(usuario);}
    }

    public void editarUsuario(String email,String senha, String confirmarSenha) throws Exception{
        StringBuilder message = new StringBuilder();
        if (!validarEmail(email)){message.append("O email digitado não é valido.");}

        else if(senha.length() <= 0){message.append("Digite uma senha.");}

        else if(confirmarSenha.length() <=0){message.append("Digite uma confirmação de senha.");}

        else if(!senha.equals(confirmarSenha)){message.append("As senhas digitadas não conferem.");}

        if(message.length() > 0){throw new Exception(message.toString());}
        else{UsuarioDAO.updateUsuario(email,senha);
            Session.usuarioLogado.setEmail(email);
            Session.usuarioLogado.setSenha(senha);
        }
    }


    public boolean deleteUsuario(Usuario usuario)throws Exception{
        StringBuilder message = new StringBuilder();
        boolean onDelete = false;
        if ((UsuarioDAO.deleteUsuario(usuario))){
            onDelete = true;
            Session.setUsuarioLogado(null);
        }else{
            message.append("Desculpe, o usuário nao pode ser Apagado.");
            throw new Exception(message.toString());
        }
        return onDelete;
    }



    public boolean montarSession()throws Exception{
        boolean retorno = false;
        StringBuilder message = new StringBuilder();
        if (UsuarioDAO.setSession(Session.getUsuarioLogado().getLogin())){
            retorno = true;
        }else{
            message.append("não foi possivel atualizar o usuario logado.");
            throw new Exception(message.toString());
        }
        return retorno;
    }


    public boolean validarEmail(String email) {
        boolean validadeEmail = false;
        if (email != null && email.length() > 0) {
            String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
            Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
            Matcher matcher = pattern.matcher(email);
            if (matcher.matches()) {
                validadeEmail = true;
            }
        }
        return validadeEmail;
    }


    public boolean validarLogin(String usuario) {
        boolean LoginValido = false;
        if ((usuario.length() < 25) && (usuario.length() >= 4)) {
            LoginValido = true;
        }
        return LoginValido;
    }

    /**
     * Metodo usado para alterar o valor inserido na database
     * de true e false para 0 e 1
     */
    public static int passBoolean(Usuario usuario){
        int retorno = 0;
        if(usuario.getAtivo()){
            retorno = 1;
        }
        return retorno;
    }
}
